<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Eclipse Modeling Framework</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Eclipse_Modeling_Framework"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Eclipse_Modeling_Framework rootpage-Eclipse_Modeling_Framework skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Eclipse Modeling Framework</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Das <b>Eclipse Modeling Framework</b> (<b>EMF</b>) ist ein <a href="Open_Source" title="Open Source">quelloffenes</a> <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>-<a href="Framework" title="Framework">Framework</a> für <a href="Modell" title="Modell">Modellierung</a>. Es ermöglicht unter anderem die automatisierte Erzeugung von <a href="Quelltext" title="Quelltext">Quelltext</a> aus Modellen. EMF ist ein Projekt der <a href="Eclipse_(IDE)" title="Eclipse (IDE)">Eclipse</a>-Open-Source-Gemeinschaft.
</p>
<div class="mw-heading mw-heading2"><h2 id="Vorgehensweise">Vorgehensweise</h2></div>
<p>Im Zentrum der Softwareentwicklung mit EMF steht ein Domänenmodell, das einen abzubildenden Problembereich in Form eines <a href="Klassendiagramm" title="Klassendiagramm">Klassendiagramms</a> beschreibt. Dieses Domänenmodell wird in EMF als Ecore-Modell bezeichnet. EMF bietet zwei Editoren, mit denen sich Ecore-Modelle erstellen und editieren lassen: Einen diagrammatischen sowie einen baumbasierten Editor. Daneben ist es möglich, andere, Klassendiagramm-ähnliche Formate automatisiert in Ecore-Modelle zu konvertieren. Unterstützte Eingabeformate sind <a href="XML-Schema" class="mw-redirect" title="XML-Schema">XSD</a>-Schemen (wie etwa bei <a href="JAXB" class="mw-redirect" title="JAXB">JAXB</a>), annotierte Java-Interfaces und <a href="Unified_Modeling_Language" title="Unified Modeling Language">UML</a>-Diagramme (<a href="Rational_Rose" title="Rational Rose">Rose</a>, <a href="TOPCASED" title="TOPCASED">TOPCASED</a>, MagicDraw und Omondo).
</p><p>Für ein gegebenes Ecore-Modell generiert EMF einen Editor, mit dem sich <a href="Objektinstanz" class="mw-redirect" title="Objektinstanz">Instanzen</a> dieses Modells erstellen, abfragen, manipulieren, im <a href="XML_Metadata_Interchange" title="XML Metadata Interchange">XMI</a>-Format <a href="Serialisierung" title="Serialisierung">serialisieren</a>, validieren und im Stil des <a href="Model_View_Controller" title="Model View Controller">MVC-Entwurfsmusters</a> auf Änderungen überwachen lassen. Darüber hinaus wird <a href="JUnit" title="JUnit">JUnit</a>-Code erzeugt, der den generierten Code testet.
</p><p>Der Generierungsvorgang sowie der generierte Code können angepasst werden. Insbesondere müssen Rümpfe von modellierten <a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methodensignaturen</a> durch die Entwickler implementiert werden. Implementierte Funktionalität und neu generierter Code werden automatisch gemerged. Für weitergehende Ansprüche bietet EMF etwa die Möglichkeit, Modelle dynamisch zur Laufzeit zu erstellen (etwa, wenn erst dann das Modell bekannt ist). Durch Verwendung von Plugins ist es möglich, vollständige datenorientierte <a href="Fat_Client" title="Fat Client">RCP</a>-Anwendungen generieren zu lassen und Modellinstanzen in beliebigen Datenbanken zu persistieren.
</p>
<div class="mw-heading mw-heading2"><h2 id="Bestandteile">Bestandteile</h2></div>
<ul><li>Das Ecore-<a href="Metamodell" title="Metamodell">Metamodell</a> ist der Beschreibungsansatz für Ecore-Modelle. Es enthält grundlegende Konzepte der objektorientierten Modellierung wie etwa <a href="Paket_(UML)" title="Paket (UML)">Pakete</a>, <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassen</a>, <a href="Referenz_(Programmierung)" title="Referenz (Programmierung)">Referenzen</a> und <a href="Attribut_(Programmierung)" title="Attribut (Programmierung)">Attribute</a>. Ecore basiert auf einer Teilmenge des <a href="Meta-Object_Facility" class="mw-redirect" title="Meta-Object Facility">MOF</a>-Standards für Metamodelierung (Meta Object Facility). Im Zuge seiner erfolgreichen Verwendung in der Praxis übte EMF direkten Einfluss auf die Entwicklung des EMOF-Standards (Essential MOF) aus (eine Teilmenge von MOF). Ecore ist daher die de facto Referenzimplementierung von EMOF.</li>
<li>Bei der Codegenerierung greift EMF auf JET (Java Emitter Templates) zurück. JET ist eine templatebasierte Sprache in der Art von <a href="JavaServer_Pages" class="mw-redirect" title="JavaServer Pages">JavaServer Pages</a>. Die zu generierenden Artefakte werden hier durch Templates beschrieben – „Dateischablonen“ mit feststehenden, konstanten Anteilen und „Lücken“, die dynamisch gefüllt werden.</li>
<li>Nach wiederholter Codegenerierung, etwa aufgrund von Modellerweiterungen, ist JMerge dafür zuständig, bereits vorgenommene Anpassungen in die jeweils neueste Version des generierten Codes einzupflegen.</li>
<li>Die <a href="Service_Data_Objects" title="Service Data Objects">SDO</a>-Referenzimplementierung von <a href="IBM" title="IBM">IBM</a> nutzt EMF und ist Teil der EMF-Installation.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Vorteile">Vorteile</h2></div>
<p>Einer der größten Vorteile ist die Integration in die Eclipse-Werkzeugplattform. Dies ermöglicht die Generierung von UI-Komponenten sowie die Zusammenarbeit mit anderen Eclipse-Projekten, etwa im Eclipse Graphical Modeling Framework (GMF). <a href="Serialisierung" title="Serialisierung">Serialisierung</a> und <a href="Datenvalidierung" title="Datenvalidierung">Validierung</a> steigern die Produktivität beim Entwickeln. Außerdem ist die Einarbeitungszeit gering aufgrund vieler Möglichkeiten der Modellierung (<a href="XML-Schema" class="mw-redirect" title="XML-Schema">XSD</a>, <a href="Unified_Modeling_Language" title="Unified Modeling Language">UML</a>, Java-Interfaces).
Der Einsatz von Code-Generatoren und <a href="Modellgetriebene_Softwareentwicklung" title="Modellgetriebene Softwareentwicklung">MDD</a> (Model Driven Development) steigert ebenfalls die Produktivität, reduziert Wiederholungen und damit mögliche Fehlerquellen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Open_Source_Frameworks_rund_um_EMF">Open Source Frameworks rund um EMF</h2></div>
<ul><li>Acceleo (Ein Codegenerator, der EMF-Modelle als Input nutzt)</li>
<li><a href="Atlas_Transformation_Language" title="Atlas Transformation Language">ATL</a> (Eine Modell-Transformationssprache)</li>
<li>Connected Data Objects (CDO), eine freie Implementierung von Distributed Shared Model auf Basis von EMF</li>
<li>EMFForms (Ein Framework für die Erstellung von formular-basierten Oberflächen für ein Ecore-Modell)<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></li>
<li>EMFStore (Ein Model Repository (Server) für EMF)<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></li>
<li>Generic Eclipse Modeling System (GEMS)</li>
<li>Graphical Modeling Framework (GMF)</li>
<li><a href="Xtext" title="Xtext">Xtext</a></li>
<li><a href="Eclipse_Sirius" title="Eclipse Sirius">Eclipse Sirius</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noresize noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Commons"></span></span></div><b><span class=""><a class="external text" href="https://commons.wikimedia.org/wiki/Category:Eclipse_Modeling_Framework?uselang=de"><span lang="en">Commons</span>: Eclipse Modeling Framework</a></span></b> – Sammlung von Bildern, Videos und Audiodateien</div>
<ul><li><a rel="nofollow" class="external text" href="http://www.eclipse.org/modeling/emf">EMF</a> Website auf eclipse.org</li>
<li><a rel="nofollow" class="external text" href="http://www.devx.com/Java/Article/29093">Discover the Eclipse Modeling Framework (EMF) and Its Dynamic Capabilities</a> (Artikel auf devx.com)</li>
<li><a rel="nofollow" class="external text" href="http://it-republik.de/jaxenter/artikel/Ed-Merks-Nur-echte-Entwickler-die-echten-Code-schreiben-loesen-Probleme-2191.html">Interview mit EMF-Leiter Ed Merks</a> (Artikel aus dem Eclipse-Magazin)</li>
<li><a rel="nofollow" class="external text" href="https://eclipsesource.com/blogs/2011/03/22/what-every-eclipse-developer-should-know-about-emf-part-1/">EMF Einsteiger Tutorial</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://www.eclipse.org/ecp/emfforms/">[1]</a> auf eclipse.org</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://eclipse.org/emfstore/">EMFStore</a> auf eclipse.org</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2022-02-15" href="https://de.wikipedia.org/wiki/?title=Eclipse_Modeling_Framework&oldid=220235921">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>